package zisu.netty.practice.netty.inBoundAndOutBound;

import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.ByteToMessageDecoder;

import java.util.List;

/**
 * @Desc: ""
 * @Author: caixiang
 * @DATE: 2020/7/29 9:01
 */
public class MyByteToLongDecoder extends ByteToMessageDecoder {
    /**
     * decode 会根据接受的数据，被调用多次，直到确定没有新的元素被添加到list，或者ByteBuf 没有更多的可读字节为之。
     * 如果list out 不为空，就会将list内容 传递给下一个channelinboundhandler处理，该处理器的方法（业务方法）也会被调用多次
     *
     *  @Description
     *  @Param  ctx 上下文对象
     *          in  入栈的ByteBuf
     *          out List集合，将解码后的数据传给下一个handler处理
     *  @Return
     *  @Author caixiang
     *  @Date 2020/7/29  9:04
     **/
    @Override
    protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exception {
        //因为long 8个字节,,所有只有当readableBytes大于8的时候才能
        System.out.println("调用 server-MyByteToLongDecoder-decode");
        if(in.readableBytes() >= 8){
            out.add(in.readLong());
        }

    }
}
